/**
 * Created in 2012-2-28.
 */
package com.surekam.mnai.webservice.server;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import com.surekam.mnai.model.Address;
import com.surekam.mnai.model.MobileNumberAttribution;
import com.surekam.mnai.webservice.WsConstants;

/**
 * 手机号码归属信息服务类型。
 * 
 * @author 吴政
 * 
 */
@Component
@Path("/mobile")
public class MobileNumberAttributionServer {

	private static Logger log = LoggerFactory
			.getLogger(MobileNumberAttributionServer.class);

	/**
	 * 查询指定手机号码的归属信息。
	 * 
	 * @param mobileNumber
	 *            手机号码
	 * @return 该手机号码的归属信息
	 */
	@GET
	@Path("/queryAttribution/{mobileNumber}")
	@Produces({ MediaType.APPLICATION_JSON + WsConstants.WEB_CHARSET })
	public MobileNumberAttribution queryAttribution(
			@PathParam("mobileNumber") String mobileNumber) {
		log.info("Query attribution by mobile number: [" + mobileNumber + "]");

		return new MobileNumberAttribution(mobileNumber, "", Address.UNKNOW, new Date());
	}

	/**
	 * 查询指定手机号码列表对应的归属信息列表，返回的结果列表中项的顺序与传入的手机号码顺序一一对应。 <br />
	 * 多个手机号码之间应该以任意的非数字字符分隔开，如"13900000000,13900000001"或
	 * "13900000002&13900000003"。
	 * 
	 * @param mobileNumbers
	 *            手机号码
	 * @return 该手机号码的归属信息
	 */
	@GET
	@Path("/queryAttributionList/{mobileNumbers}")
	@Produces({ MediaType.APPLICATION_JSON + WsConstants.WEB_CHARSET })
	public List<MobileNumberAttribution> queryAttributionList(
			@PathParam("mobileNumbers") String mobileNumbers) {
		log.info("Query attribution by mobile number: [" + mobileNumbers + "]");
		
		List<MobileNumberAttribution> resultList = new ArrayList<MobileNumberAttribution>();
		
		for(String num : mobileNumbers.split("\\D")) {
			resultList.add(new MobileNumberAttribution(num, "",
					Address.UNKNOW, new Date()));
		}

		return resultList;
	}
}
